/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package grafico.calculos;

import calculos.MetodoCalculo;
import calculos.MetodoIAC;
import presenter.PacientePresenter;
import persistencia.Pacientes;
import model.Paciente;
import model.ResultadoAvaliacao;

/**
 *
 * @author Kdc
 */
public class CalcularIAC implements CalcularClassificacao {

    private double indefenidoF = 0;
    private double normalF = 0;
    private double sobrepesoF = 0;
    private double obesidadeF = 0;
    private double indefinidoM = 0;
    private double normalM = 0;
    private double sobrepedoM = 0;
    private double obesidadeM = 0;
    private double obesidadem = 0;
    private int qntMulheres = 0;
    private int qntHomens = 0;
    private MetodoCalculo metodoCalculo;
    private Pacientes pacientes = new Pacientes();
    private PacientePresenter controlaPaciente = new PacientePresenter(pacientes);
    ResultadoAvaliacao resultadoAvaliacao;

    public CalcularIAC() {

        calcularClassificacaoFeminino();
        calcularClassificacaoMaculino();

    }

    @Override
    public void calcularClassificacaoFeminino() {

        controlaPaciente.carregarPacientes();

        for (int i = 0; i < pacientes.getPacientes().size(); i++) {
            Paciente paciente = pacientes.getPacientes().get(i);

            metodoCalculo = new MetodoIAC();
            metodoCalculo.calcula(paciente);

            if (paciente.getSexo() == 'F') {
                qntMulheres = qntMulheres + 1;

                for (int j = 0; j < paciente.getResultados().size(); j++) {
                    if (paciente.getResultados().get(j).getMetodo().equalsIgnoreCase("IAC")) {
                        resultadoAvaliacao = paciente.getResultados().get(j);
                    }
                }

                if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("INDISPONIVEL")) {
                    indefenidoF++;

                } else if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("Normal")) {
                    normalF++;

                } else if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("Sobrepeso")) {
                    sobrepesoF++;

                } else if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("Obeso")) {
                    obesidadeF++;
                }

            }
        }
        CalcularPorcentagemFeminino();

    }

    private void CalcularPorcentagemFeminino() {
        indefenidoF = (indefenidoF * 100) / qntMulheres;
        normalF = (normalF * 100) / qntMulheres;
        sobrepesoF = (sobrepesoF * 100) / qntMulheres;
        obesidadeF = (obesidadeF * 100) / qntMulheres;
        obesidadeF = (obesidadeF * 100) / qntMulheres;

    }

    @Override
    public void calcularClassificacaoMaculino() {
        controlaPaciente.carregarPacientes();

        for (int i = 0; i < pacientes.getPacientes().size(); i++) {
            Paciente paciente = pacientes.getPacientes().get(i);

            metodoCalculo = new MetodoIAC();
            metodoCalculo.calcula(paciente);

            if (paciente.getSexo() == 'M') {
                qntHomens = qntHomens + 1;

                for (int j = 0; j < paciente.getResultados().size(); j++) {
                    if (paciente.getResultados().get(j).getMetodo().equalsIgnoreCase("IAC")) {
                        resultadoAvaliacao = paciente.getResultados().get(j);
                    }
                }

                if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("INDISPONIVEL")) {
                    indefinidoM++;

                } else if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("Normal")) {
                    normalM++;

                } else if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("Sobrepeso")) {
                    sobrepedoM++;

                } else if (resultadoAvaliacao.getCondicao().equalsIgnoreCase("Obeso")) {
                    obesidadeM++;
                }

            }
        }
        CalcularPorcentagemMasculino();

    }

    private void CalcularPorcentagemMasculino() {
        indefinidoM = (indefinidoM * 100) / qntHomens;
        normalM = (normalM * 100) / qntHomens;
        sobrepedoM = (sobrepedoM * 100) / qntHomens;
        obesidadeM = (obesidadeM * 100) / qntHomens;
        obesidadem = (obesidadem * 100) / qntHomens;
    }

    public double getIndefenidoF() {
        return indefenidoF;
    }

    public void setIndefenidoF(double indefenidoF) {
        this.indefenidoF = indefenidoF;
    }

    public double getNormalF() {
        return normalF;
    }

    public void setNormalF(double normalF) {
        this.normalF = normalF;
    }

    public double getSobrepesoF() {
        return sobrepesoF;
    }

    public void setSobrepesoF(double sobrepesoF) {
        this.sobrepesoF = sobrepesoF;
    }

    public double getObesidadeF() {
        return obesidadeF;
    }

    public void setObesidadeF(double obesidadeF) {
        this.obesidadeF = obesidadeF;
    }

    public double getIndefinidoM() {
        return indefinidoM;
    }

    public void setIndefinidoM(double indefinidoM) {
        this.indefinidoM = indefinidoM;
    }

    public double getNormalM() {
        return normalM;
    }

    public void setNormalM(double normalM) {
        this.normalM = normalM;
    }

    public double getSobrepedoM() {
        return sobrepedoM;
    }

    public void setSobrepedoM(double sobrepedoM) {
        this.sobrepedoM = sobrepedoM;
    }

    public double getObesidadeM() {
        return obesidadeM;
    }

    public void setObesidadeM(double obesidadeM) {
        this.obesidadeM = obesidadeM;
    }

    public double getObesidadem() {
        return obesidadem;
    }

    public void setObesidadem(double obesidadem) {
        this.obesidadem = obesidadem;
    }

    public int getQntMulheres() {
        return qntMulheres;
    }

    public void setQntMulheres(int qntMulheres) {
        this.qntMulheres = qntMulheres;
    }

    public int getQntHomens() {
        return qntHomens;
    }

    public void setQntHomens(int qntHomens) {
        this.qntHomens = qntHomens;
    }

    public MetodoCalculo getMetodoCalculo() {
        return metodoCalculo;
    }

    public void setMetodoCalculo(MetodoCalculo metodoCalculo) {
        this.metodoCalculo = metodoCalculo;
    }

    public Pacientes getPacientes() {
        return pacientes;
    }

    public void setPacientes(Pacientes pacientes) {
        this.pacientes = pacientes;
    }

    public PacientePresenter getControlaPaciente() {
        return controlaPaciente;
    }

    public void setControlaPaciente(PacientePresenter controlaPaciente) {
        this.controlaPaciente = controlaPaciente;
    }
}
